import Gio from 'gi://Gio';
import GLib from 'gi://GLib';
+import Pango from 'gi://Pango';
import Shell from 'gi://Shell';
import St from 'gi://St';
import GnomeDesktop from 'gi://GnomeDesktop';
({notifyError}) => notifyError(title, err.message));
}
+/**
+ * Fix up embedded markup so that it can be displayed correctly in
+ * UI elements such as the message list. In some cases, we might want to
+ * keep some of the embedded markup, so specify allowMarkup for that case
+ *
+ * @param {string} text containing markup to escape and parse
+ * @param {boolean} allowMarkup to allow embedded markup or just escape it all
+ * @returns the escaped string
+ */
+export function fixMarkup(text, allowMarkup) {
+ if (allowMarkup) {
+ // Support &, ", ', < and >, escape all other
+ // occurrences of '&'.
+ let _text = text.replace(/&(?!amp;|quot;|apos;|lt;|gt;)/g, '&');
+
+ // Support <b>, <i>, and <u>, escape anything else
+ // so it displays as raw markup.
+ _text = _text.replace(/<(?!\/?[biu]>)/g, '<');
+
+ try {
+ Pango.parse_markup(_text, -1, '');
+ return _text;
+ } catch (e) {}
+ }
+
+ // !allowMarkup, or invalid markup
+ return GLib.markup_escape_text(text, -1);
+}
+
/**
* Returns an {@link St.Label} with the date passed formatted
* using {@link formatTime}
const DEFAULT_EXPAND_LINES = 6;
-/**
- * @param {string} text
- * @param {boolean} allowMarkup
- * @returns {string}
- */
-export function _fixMarkup(text, allowMarkup) {
- if (allowMarkup) {
- // Support &, ", ', < and >, escape all other
- // occurrences of '&'.
- let _text = text.replace(/&(?!amp;|quot;|apos;|lt;|gt;)/g, '&');
-
- // Support <b>, <i>, and <u>, escape anything else
- // so it displays as raw markup.
- // Ref: https://developer.gnome.org/notification-spec/#markup
- _text = _text.replace(/<(?!\/?[biu]>)/g, '<');
-
- try {
- Pango.parse_markup(_text, -1, '');
- return _text;
- } catch (e) {}
- }
-
- // !allowMarkup, or invalid markup
- return GLib.markup_escape_text(text, -1);
-}
-
export const URLHighlighter = GObject.registerClass(
class URLHighlighter extends St.Label {
_init(text = '', lineWrap, allowMarkup) {
}
setMarkup(text, allowMarkup) {
- text = text ? _fixMarkup(text, allowMarkup) : '';
+ text = text ? Util.fixMarkup(text, allowMarkup) : '';
this._text = text;
this.clutter_text.set_markup(text);
set title(text) {
this._titleText = text;
- const title = text ? _fixMarkup(text.replace(/\n/g, ' '), false) : '';
+ const title = text ? Util.fixMarkup(text.replace(/\n/g, ' '), false) : '';
this.titleLabel.clutter_text.set_markup(title);
this.notify('title');
}
const JsUnit = imports.jsUnit;
import Pango from 'gi://Pango';
-import 'resource:///org/gnome/shell/ui/environment.js';
-import 'resource:///org/gnome/shell/ui/main.js';
-
-import * as MessageList from 'resource:///org/gnome/shell/ui/messageList.js';
+import {fixMarkup} from 'resource:///org/gnome/shell/misc/util.js';
/**
* Assert that `input`, assumed to be markup, gets "fixed" to `output`,
function assertConverts(input, output) {
if (!output)
output = input;
- let fixed = MessageList._fixMarkup(input, true);
+ let fixed = fixMarkup(input, true);
JsUnit.assertEquals(output, fixed);
let parsed = false;
* @param {string} output the output
*/
function assertEscapes(input, output) {
- let fixed = MessageList._fixMarkup(input, false);
+ let fixed = fixMarkup(input, false);
JsUnit.assertEquals(output, fixed);
let parsed = false;